'''desc
本测试例子是用于学习描述符
描述符是实现了特定协议的类，这个协议包括__get__,__set__,__delete__方法。
此外，property类实现了完整的描述符协议，它把对函数的调用伪装成对属性的访问
同时定义了__get__,__set__的描述符称为数据描述符；仅定义了__get__的称为非数据描述符。两者区别为：
如果obj.__dict__中有与描述符同名的属性，若描述符是数据描述符，则优先调用描述符；若为非数据描述符，则优先使用obj.__dict__中属性
描述符协议必须定义在类的层次上，否则无法被自动调用

__get__(self,instance,owner)
:self 描述符对象本身
:instance 使用描述符的对象实例
:owner 使用描述符的对象拥有者

__set__(self, instance, value)
:value 对描述符的赋值


描述符是Python中复杂属性访问的基础。它在内部被用于实现property、方法、类方法、静态方法和super类型。
它是一个类，定义了另一个类的属性的访问方式。换句话说，一个类可以将属性管理委托给另一个类。

在属性查找中，该协议实际上是由对象的特殊方法__getattribute__()调用。每次通过点号（形式为instance.attribute）或者getattr(instance, 'attribute')函数调用来执行这样的查找时，
都会隐式地调用__getattribute__()，它按下列顺序查找该属性：
1. 验证该属性是否为实例的类对象的数据描述符
2. 如果不是，就查看该属性是否能在实例对象的__dict__中找到
3. 最后，查看该属性是否为实例的类对象的非数据描述符

换句话说，数据描述符优先于__dict__查找，而__dict__查找优先于非数据描述符。
'''